package com.zy.Lambda;

import org.junit.Test;

import java.util.function.Predicate;

public class UsePredicate
{
    /*
    Predicate：断言型接口
        抽象方法：boolean test(Type t)：传入一个参数，返回一个布尔值
        默认方法：and(Predicate other)：相当于 && ，当两个函数的Predicate值均为True时，结果为True，否则为False
        默认方法：or(Predicate other)：相当于 || ，当两个函数的Predicate值有一个为True时，结果为True，否则为False
        默认方法：negate(Predicate other)：相当于 ~ ，取非运算。对当前Test执行结果取反运算。
        静态方法：isEqual(Object targetRef)，对当前操作进行"=="操作,即取等操作,可以理解为 A == B。
    * */

    @Test
    public void test1()
    {
        Predicate<Integer> predicate=x->x>0;
        boolean test = predicate.test(2);
        System.out.println(test);
        //打印结果为：true(2>0)
    }

    @Test
    public void test2()
    {
        Predicate<Integer> predicate1=a->a>0;
        Predicate<Integer> predicate2=s->s<5;
        boolean test = predicate1.and(predicate2).test(4);
        System.out.println(test);
        //打印结果：true（0<4<5）
    }

    @Test
    public void test3()
    {
        Predicate<Integer> predicate1=a->a>0;
        Predicate<Integer> predicate2=s->s<5;
        boolean test = predicate1.or(predicate2).test(-1);
        System.out.println(test);
        //打印结果：true（-1<0 ,-1<5）
    }

    @Test
    public void test4()
    {
        Predicate<Integer> predicate1=a->a>0;
        boolean test = predicate1.negate().test(-1);
        System.out.println(test);
        //打印结果：true（-1<0 ）
    }

    @Test
    public void test5()
    {
        boolean test = Predicate.isEqual("hahaha").test("ahahah");
        System.out.println(test);
        //打印结果：false（hahaha!=ahahah）
    }
}
